﻿using System.Windows.Input;

namespace Black.SurfaceToolkit.Controls
{
    /// <summary>
    /// Fournit des commandes pour la gestion des éléments.
    /// </summary>
    public static class CoverFlowItemCommands
    {
        #region Accesseurs

        /// <summary>
        /// Obtient la commande de suppression de l'élément.
        /// </summary>
        public static RoutedUICommand Remove
        {
            get
            {
                return CoverFlowItemCommands.EnsureCommand(CoverFlowCommandId.Remove);
            }
        }

        /// <summary>
        /// Obtient la commande de déplacement à la position spécifiée.
        /// </summary>
        public static RoutedUICommand MoveTo
        {
            get
            {
                return CoverFlowItemCommands.EnsureCommand(CoverFlowCommandId.MoveTo);
            }
        }

        /// <summary>
        /// Obtient la commande de déplacement d'un nombre spécifié de positions.
        /// </summary>
        public static RoutedUICommand MoveOf
        {
            get
            {
                return CoverFlowItemCommands.EnsureCommand(CoverFlowCommandId.MoveOf);
            }
        }

        /// <summary>
        /// Obtient la commande de sélection de l'élément.
        /// </summary>
        public static RoutedUICommand Select
        {
            get
            {
                return CoverFlowItemCommands.EnsureCommand(CoverFlowCommandId.Select);
            }
        }

        #endregion

        #region Variables de classe

        private static RoutedUICommand[] _Commands = new RoutedUICommand[(int)CoverFlowCommandId.Maximum];

        #endregion

        #region Fonctions statiques privées

        /// <summary>
        /// Obtient la commande d'identifiant spécifié.
        /// </summary>
        /// <param name="p_eId">Identifiant de commande.</param>
        /// <returns>Commande d'identifiant <paramref name="p_eId" />.</returns>
        private static RoutedUICommand EnsureCommand(CoverFlowCommandId p_eId)
        {
            RoutedUICommand oCommand = CoverFlowItemCommands._Commands[(int)p_eId];

            if (oCommand == null)
            {
                string oCommandName = p_eId.ToString();
                oCommand = new RoutedUICommand(oCommandName, oCommandName, typeof(CoverFlowItemCommands));

                CoverFlowItemCommands._Commands[(int)p_eId] = oCommand;
            }

            return (oCommand);
        }

        #endregion
    }
}
